﻿#include <iostream>
#include <string>
using namespace std;


int main()
{

	int a = 1;
	auto func = [a](int a)->void {a = 3; };

	return 0;
}

////终止函数
//template<class T>
//void _ShowList(T value)
//{
//	//...
//	cout << value << endl;
//}
//
//template<class T, class ...Args>
//void _ShowList(T value, Args... args)
//{
//	//...
//	cout << value << " ";
//	_ShowList(args...);
//}
//
//template <class ...Args>
//void ShowList(Args... args)
//{
//	_ShowList(args...);
//}
//
//int main()
//{
//	ShowList("string", 1, '?');
//	return 0;
//}

//class Example
//{
//public:
//	/*
//		这个类的对象我们不想被拷贝
//		于是我们删除他的拷贝构造
//	*/
//	Example() {};
//	Example(const Example& e) = delete;
//
//private:
//	int example = 0;
//};
//
//int main()
//{
//
//	Example e;
//	//Example e2(e);
//
//	return 0;
//}


//class Example
//{
//public:
//	/*
//		我们提供构造函数，不管是什么构造，拷贝或移动
//		都不会生成默认构造函数。
//	*/
//	Example() = default;
//
//	Example(const Example& e) 
//	{};
//		
//private:
//	int example = 0;
//};
//
//int main()
//{
//	Example e;
//
//	return 0;
//}


//
//void Fun(int& x)
//{
//	cout << "左值引用" << endl;
//}
//
//void Fun(const int& x)
//{
//	cout << "const 左值引用" << endl;
//}
//
//void Fun(int&& x)
//{
//	cout << "右值引用" << endl;
//}
//
//void Fun(const int&& x)
//{
//	cout << "const 右值引用" << endl;
//}
//
////万能引用
///*
//	模板中T&& 不代表右值引用，而是万能引用
//	如果传值为左值，那么就是左值引用
//	如果传值为右值，那么就是右值引用
//*/
////template<typename T>
////void PerfectForward(T&& t)
////{
////	Fun(t);
////}
//
//template<typename T>
//void PerfectForward(T&& t)
//{
//	//forward<T>(val) 完美转发
//	Fun(forward<T>(t));
//}

//int main()
//{
//	PerfectForward(10);            // 右值
//
//	int a;
//	PerfectForward(a);             // 左值
//	PerfectForward(std::move(a));  // 右值
//
//	const int b = 8;
//	PerfectForward(b);	           // const 左值
//	PerfectForward(std::move(b));  // const 右值
//
//	return 0;
//}
//int main()
//{
//	const int x = 1;
//	double y = 2.2;
//
//	decltype(x * y) ret; // ret的类型是double
//	decltype(&x) p;      // p的类型是int*
//
//	cout << typeid(ret).name() << endl;
//	cout << typeid(p).name() << endl;
//
//	return 0;
//}
//

//int main()
//{
//
//	const string& s = "hello world";
//
//
//	return 0;
//}

